home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
FROMUTS
/
DDEPASCAL
/
DDE
/
!PC
/
h
/
sprite
< prev
next >
Wrap
Text File
|
1992-04-30
|
20KB
|
604 lines
(*
* Title : sprite.h
* Purpose: provide access to RISC OS sprite facilities
*
*)
# ifndef __sprite_h
# define __sprite_h
# ifndef __os_h
# include "os.h"
# endif
(*
* This file contains functions for performing operations on sprites.
* For brevity only a brief description is given for each call. More details
* can be found in the Programmer's Reference manual under the section on
* Sprite SWIs.
*
*)
(******** Simple operations, use no sprite area, no name/sprite pointer ***)
const
sprite_nopalette = 0;
sprite_haspalette = 1;
type sprite_palflag_ptr = ^sprite_palflag;
sprite_palflag = integer;
type sprite_factors_ptr = ^sprite_factors;
sprite_factors =
record
xmag, ymag, xdiv, ydiv : integer
end;
type sprite_pixtrans_ptr = ^sprite_pixtrans;
sprite_pixtrans = byte;
(* ----------------------------- sprite_screensave -------------------------
* Save the current graphics window as a sprite file, with optional palette.
* Equivalent to *ScreenSave.
*
*)
procedure sprite_screensave(filename : string;
flag : sprite_palflag) : error; extern;
(* ---------------------------- sprite_screenload --------------------------
* Load a sprite file onto the screen. Equivalent to *ScreenLoad.
*
*)
procedure sprite_screenload(filename : string) : error; extern;
(****** Operations on either system/user area, no name/sprite pointer *****)
type sprite_area_ptr = ^sprite_area;
sprite_area = (* Format of a sprite area control block *)
record
size : integer;
number : integer;
sproff : integer;
freeoff : integer
end;
type sprite_header_ptr = ^sprite_header;
sprite_header = (* Format of a sprite header *)
record
next : integer; (* Offset to next sprite *)
name : packed array[1..11] of char;
(* Sprite name *)
width : integer; (* Width in words-1 (0..639) *)
height : integer; (* Height in scanlines-1 (0..255/511) *)
lbit : integer; (* First bit used (left end of row) *)
rbit : integer; (* Last bit used (right end of row) *)
image : integer; (* Offset to sprite image *)
mask : integer; (* Offset to transparency mask *)
mode : integer (* Mode sprite was defined in *)
(* Palette data optionally follows here *)
(* in memory *)
end;
const sprite_mainarea = sprite_area_ptr(0); (* Typed constants !!! *)
type sprite_ptr = pointer;
(* ------------------------ sprite_area_initialise -------------------------
* Initialise an area of memory as a sprite area
*
*)
procedure sprite_area_initialise(area : sprite_area_ptr;
size : integer); extern;
(* ----------------------- sprite_area_readinfo ----------------------------
* Read information from a sprite area control block
*
*)
procedure sprite_area_readinfo(area : sprite_area_ptr;
resultarea : sprite_area_ptr) : error; extern;
(* --------------------------- sprite_area_reinit --------------------------
* Reinitialise a sprite area.
* If system area, then equivalent to *SNew
*
*)
procedure sprite_area_reinit(area : sprite_area_ptr) : error; extern;
(* --------------------------- sprite_area_load ----------------------------
* Load a sprite file into a sprite area.
* If system area, then equivalent to *SLoad
*
*)
procedure sprite_area_load(area : sprite_area_ptr;
filename : string) : error; extern;
(* ---------------------------- sprite_area_merge --------------------------
* Merge a sprite file with a sprite area.
* If system area, then equivalent to *SMerge
*
*)
procedure sprite_area_merge(area : sprite_area_ptr;
filename : string) : error; extern;
(* ---------------------------- sprite_area_save ---------------------------
* Saves a sprite area as a sprite file.
* If system area, then equivalent to *SSave
*
*)
procedure sprite_area_save(area : sprite_area_ptr;
filename : string) : error; extern;
(* ---------------------------- sprite_getname -----------------------------
* Return the name and length of name of the n'th sprite in a sprite area
* into a buffer.
*
*)
procedure sprite_getname(area : sprite_area_ptr;
buffer : pointer;
var length : integer;
index : integer) : error; extern;
(* ---------------------------- sprite_get ---------------------------------
* Copy a rectangle of screen delimited by the last pair of graphics cursor
* positions as a named sprite in a sprite area, optionally storing the
* palette with the sprite.
*
*)
procedure sprite_get(area : sprite_area_ptr;
name : string;
flag : sprite_palflag) : error; extern;
(* ---------------------------- sprite_get_rp ------------------------------
* Copy a rectangle of screen delimited by the last pair of graphics cursor
* positions as a named sprite in a sprite area, optionally storing the
* palette with the sprite. Address of sprite returned in resultaddress.
*
*)
procedure sprite_get_rp(area : sprite_area_ptr;
name : string;
flag : sprite_palflag;
var resultaddress : sprite_ptr) : error; extern;
(* ---------------------------- sprite_get_given ---------------------------
* Copy a rectangle of screen delimited by the given pair of graphics
* coordinates as a named sprite in a sprite area, optionally storing the
* palette with the sprite.
*
*)
procedure sprite_get_given(area : sprite_area_ptr;
name : string;
flag : sprite_palflag;
x0, y0, x1, y1 : integer) : error; extern;
(* --------------------------- sprite_get_given_rp -------------------------
* Copy a rectangle of screen delimited by the given pair of graphics
* coordinates as a named sprite in a sprite area, optionally storing the
* palette with the sprite. Address of sprite returned in resultaddress.
*
*)
procedure sprite_get_given_rp(area : sprite_area_ptr;
name : string;
flag : sprite_palflag;
x0, y0, x1, y1 : integer;
var resultaddress : sprite_ptr) : error; extern;
(* ------------------------------ sprite_create ----------------------------
* Create a named sprite in a sprite area of specified size and screen mode,
* optionally reserving space for palette data with the sprite.
*
*)
procedure sprite_create(area : sprite_area_ptr;
name : string;
flag : sprite_palflag;
width, height, mode : integer) : error; extern;
(* ------------------------------ sprite_create_rp -------------------------
* Create a named sprite in a sprite area of specified size and screen mode,
* optionally reserving space for palette data with the sprite.Address of
* sprite returned in resultaddress.
*
*)
procedure sprite_create_rp(area : sprite_area_ptr;
name : string;
flag : sprite_palflag;
width, height, mode : integer;
var resultaddress : sprite_ptr) : error; extern;
(*********** Operations on system/user area, name/sprite pointer **********)
const
sprite_id_name = 0;
sprite_id_addr = $74527053; (* 'Magic' number ("SpRt") to test against *)
type sprite_type_ptr = ^sprite_type;
sprite_type = integer;
type sprite_id_ptr = ^sprite_id;
sprite_id_tag = 0..1;
sprite_id =
record
s : record
case sprite_id_tag of
(* Can use either name of sprite or address (faster) *)
0 : (name : string);
1 : (addr : sprite_ptr)
end;
(* User must tag the use of this structure manually *)
tag : sprite_type
end;
(* ----------------------------- sprite_select -----------------------------
* Select the specified sprite for plotting using plot(0xed,x,y).
*
*)
procedure sprite_select(area : sprite_area_ptr;
id : sprite_id_ptr) : error; extern;
(* ----------------------------- sprite_select_rp --------------------------
* Select the specified sprite for plotting using plot(0xed,x,y). Address of
* sprite returned in resultaddress.
*
*)
procedure sprite_select_rp(area : sprite_area_ptr;
id : sprite_id_ptr;
var resultaddress : sprite_ptr) : error; extern;
(* ----------------------------- sprite_delete -----------------------------
* Delete the specified sprite.
*
*)
procedure sprite_delete(area : sprite_area_ptr;
id : sprite_id_ptr) : error; extern;
(* ----------------------------- sprite_rename -----------------------------
* Rename the specified sprite within the same sprite area.
*
*)
procedure sprite_rename(area : sprite_area_ptr;
id : sprite_id_ptr;
newname : string) : error; extern;
(* ----------------------------- sprite_copy -------------------------------
* Copy the specified sprite as another named sprite in the same sprite area.
*
*)
procedure sprite_copy(area : sprite_area_ptr;
id : sprite_id_ptr;
copyname : string) : error; extern;
(* ----------------------------- sprite_put --------------------------------
* Plot the specified sprite using the given GCOL action.
*
*)
procedure sprite_put(area : sprite_area_ptr;
id : sprite_id_ptr;
gcol : integer) : error; extern;
(* ----------------------------- sprite_put_given --------------------------
* Plot the specified sprite at (x,y) using the given GCOL action.
*
*)
procedure sprite_put_given(area : sprite_area_ptr;
id : sprite_id_ptr;
gcol, x, y : integer) : error; extern;
(* --------------------------- sprite_put_scaled ---------------------------
* Plot the specified sprite at (x,y) using the given GCOL action, and scaled
* using the given scale factors.
*
*)
procedure sprite_put_scaled(area : sprite_area_ptr;
id : sprite_id_ptr;
gcol, x, y : integer;
factors : sprite_factors_ptr;
pixtrans : sprite_pixtrans_ptr) : error; extern;
(* ---------------------------- sprite_put_greyscaled ----------------------
* Plot the specified sprite at (x,y) using the given GCOL action, and
* greyscaled using the given scale factors.
*
*)
procedure sprite_put_greyscaled(area : sprite_area_ptr;
id : sprite_id_ptr;
x, y : integer;
factors : sprite_factors_ptr;
pixtrans : sprite_pixtrans_ptr) : error; extern;
(* ----------------------------- sprite_put_mask ---------------------------
* Plot the specified sprite mask in the background colour.
*
*)
procedure sprite_put_mask(area : sprite_area_ptr;
id : sprite_id_ptr) : error; extern;
(* ----------------------------- sprite_put_mask_given ---------------------
* Plot the specified sprite mask at (x,y) in the background colour.
*
*)
procedure sprite_put_mask_given(area : sprite_area_ptr;
id : sprite_id_ptr;
x, y : integer) : error; extern;
(* --------------------------- sprite_put_mask_scaled ----------------------
* Plot the sprite mask at (x,y) scaled, using the background colour/action
*
*)
procedure sprite_put_mask_scaled(area : sprite_area_ptr;
id : sprite_id_ptr;
x, y : integer;
factors : sprite_factors_ptr) : error; extern;
(* ----------------------------- sprite_put_char_scaled --------------------
* Paint char scaled at (x,y)
*
*)
procedure sprite_put_char_scaled(ch : char;
x, y : integer;
factors : sprite_factors_ptr) : error; extern;
(* ---------------------------- sprite_create_mask -------------------------
* Create a mask definition for the specified sprite.
*
*)
procedure sprite_create_mask(area : sprite_area_ptr;
id : sprite_id_ptr) : error; extern;
(* ---------------------------- sprite_remove_mask -------------------------
* Remove the mask definition from the specified sprite.
*
*)
procedure sprite_remove_mask(area : sprite_area_ptr;
id : sprite_id_ptr) : error; extern;
(* ---------------------------- sprite_insert_row --------------------------
* Insert a row into the specified sprite at the given row.
*
*)
procedure sprite_insert_row(area : sprite_area_ptr;
id : sprite_id_ptr;
row : integer) : error; extern;
(* ---------------------------- sprite_delete_row --------------------------
* Delete the given row from the specified sprite.
*
*)
procedure sprite_delete_row(area : sprite_area_ptr;
id : sprite_id_ptr;
row : integer) : error; extern;
(* ---------------------------- sprite_insert_column -----------------------
* Insert a column into the specified sprite at the given column.
*
*)
procedure sprite_insert_column(area : sprite_area_ptr;
id : sprite_id_ptr;
column : integer) : error; extern;
(* ---------------------------- sprite_delete_column -----------------------
* Delete the given column from the specified sprite.
*
*)
procedure sprite_delete_column(area : sprite_area_ptr;
id : sprite_id_ptr;
column : integer) : error; extern;
(* ----------------------------- sprite_flip_x -----------------------------
* Flip the specified sprite about the x axis
*
*)
procedure sprite_flip_x(area : sprite_area_ptr;
id : sprite_id_ptr) : error; extern;
(* ----------------------------- sprite_flip_y -----------------------------
* Flip the specified sprite about the y axis
*
*)
procedure sprite_flip_y(area : sprite_area_ptr;
id : sprite_id_ptr) : error; extern;
type sprite_info_ptr = ^sprite_info;
sprite_info =
record
width, height, mask, mode : integer
end;
(* -------------------------------- sprite_readsize ------------------------
* Read the size information for the specified sprite_id
*
*)
procedure sprite_readsize(area : sprite_area_ptr;
id : sprite_id_ptr;
resultinfo : sprite_info_ptr) : error; extern;
type sprite_colour_ptr = ^sprite_colour;
sprite_colour =
record
colour, tint : integer
end;
(* ----------------------------- sprite_readpixel --------------------------
* Read the colour of a given pixel in the specified sprite_id
*
*)
procedure sprite_readpixel(area : sprite_area_ptr;
id : sprite_id_ptr;
x, y : integer;
resultcolour : sprite_colour_ptr) : error; extern;
(* ----------------------------- sprite_writepixel -------------------------
* Write the colour of a given pixel in the specified sprite_id
*
*)
procedure sprite_writepixel(area : sprite_area_ptr;
id : sprite_id_ptr;
x, y : integer;
colour : sprite_colour_ptr) : error; extern;
const
sprite_masktransparent = 0;
sprite_masksolid = 1;
type sprite_maskstate_ptr = ^sprite_maskstate;
sprite_maskstate = integer;
(* ------------------------------- sprite_readmask -------------------------
* Read the state of a given pixel in the specified sprite mask
*
*)
procedure sprite_readmask(area : sprite_area_ptr;
id : sprite_id_ptr;
x, y : integer;
var resultmaskstate : sprite_maskstate) : error; extern;
(* ------------------------------- sprite_writemask ------------------------
* Write the state of a given pixel in the specified sprite mask
*
*)
procedure sprite_writemask(area : sprite_area_ptr;
id : sprite_id_ptr;
x, y : integer;
var resultmaskstate : sprite_maskstate) : error; extern;
type sprite_state_ptr = ^sprite_state;
sprite_state =
record
r : array[0..3] of integer
end;
(* ----------------------------- sprite_restorestate -----------------------
* Restores the old state after one of the sprite redirection calls
*
*)
procedure sprite_restorestate(state : sprite_state) : error; extern;
(* ---------------------------- sprite_outputtosprite ----------------------
* Redirect VDU output to a sprite, saving old state
*
*)
procedure sprite_outputtosprite(area : sprite_area_ptr;
id : sprite_id_ptr;
save_area : pointer;
state : sprite_state_ptr) : error; extern;
(* ----------------------- sprite_outputtomask -----------------------------
* Redirects output to a sprite's transparency mask, saving old state
*
*)
procedure sprite_outputtomask(area : sprite_area_ptr;
id : sprite_id_ptr;
save_area : pointer;
state : sprite_state_ptr) : error; extern;
(* --------------------------- sprite_outputtoscreen -----------------------
* Redirect output back to screen, saving old state
*
*)
procedure sprite_outputtoscreen(save_area : pointer;
state : sprite_state_ptr) : error; extern;
(* --------------------------- sprite_sizeof_spritecontext -----------------
* Get size of save area needed to save sprite context.
*
*)
procedure sprite_sizeof_spritecontext(area : sprite_area_ptr;
id : sprite_id_ptr;
var size : integer) : error; extern;
(* ------------------------- sprite_sizeof_screencontext -------------------
* Get size of save area needed to save screen context.
*
*)
procedure sprite_sizeof_screencontext(
var size : integer) : error; extern;
(* ------------------------ sprite_removewastage ---------------------------
* Removes left hand wastage from a sprite
*
*)
procedure sprite_removewastage(area : sprite_area_ptr;
id : sprite_id_ptr) : error; extern;
(* new SWIs *)
(* ------------------------ sprite_change_size -----------------------------
* General insert/delete rows/columns operations
*
*)
procedure sprite_change_size(area : sprite_area_ptr;
id : sprite_id_ptr;
rows : boolean;
at, number : integer) : error; extern;
(* Typedefs and functions for rotating sprites. *)
type sprite_pgm_ptr = ^sprite_pgm;
sprite_pgm =
record
p0, p1, p2, p3 : array[0..1] of integer
end;
type sprite_transmat_ptr = ^sprite_transmat;
sprite_transmat = array[0..5] of integer;
type sprite_box_ptr = ^sprite_box;
sprite_box =
record
x0, y0, x1, y1 : integer
end;
(* ------------------------ sprite_put_mask_trans ---------------------
* Put a box from the mask in background colours through a transformation matrix
*
*)
procedure sprite_put_mask_trans(area : sprite_area_ptr;
id : sprite_id_ptr;
matrix : sprite_transmat_ptr) : error; extern;
(* ------------------------ sprite_put_mask_pgm -----------------------
* Put a box from the mask in background colours to a parallelogram
*
*)
procedure sprite_put_mask_pgm(area : sprite_area_ptr;
id : sprite_id_ptr;
box : sprite_box_ptr;
pgm : sprite_pgm_ptr) : error; extern;
(* ------------------------ sprite_put_trans --------------------------
* Put a box from the sprite through a transformation matrix
*
*)
procedure sprite_put_trans(area : sprite_area_ptr;
id : sprite_id_ptr;
gcol_action : integer;
box : sprite_box_ptr;
matrix : sprite_transmat_ptr;
pixtrans : sprite_pixtrans_ptr) : error; extern;
(* ------------------------ sprite_put_pgm ----------------------------
* Put a box from the sprite to a parallelogram
*
*)
procedure sprite_put_pgm(area : sprite_area_ptr;
id : sprite_id_ptr;
gcol_action : integer;
box : sprite_box_ptr;
pgm : sprite_pgm_ptr;
pixtrans : sprite_pixtrans_ptr) : error; extern;
# endif
(* end of sprite.h *)